위는 log(1+x)의 그래프에요.
Taylor Series의 다항식 차수 N이 증가함에 따라 그래프에 점점 근사하는 것을 볼 수 있어요.
또한 ∣x∣≥1인 구간에서 오차는 급격하게 증가합니다.
따라서 log(1+x) 함수는 ∣x∣<1인 경우에만 Taylor Series를 적용 가능해요.
식 (1)을 아래와 같이 약간 변형시켜봅시다.
f(x0+Δx)=n=0∑∞n!f(n)(x0)Δx(2)
x0=a이고 Δx=(x−a)로 약간 변형을 준 것이에요.
이때 Δx는 0에 가까운 값이죠.
함수 f(x,y)=x2+y2는 위 그림과 같은 그릇 모양을 하는데 이를 paraboloid라고 합니다.
이 paraboloid를 z=1인 지점에서 xy평면으로 자른다면 x2+y2=1인 원의 방정식이 나와요.
이 f(x,y)를
[xy][1001][xy] 와 같은 행렬의 형태로 표시할 수 있습니다.
위와 같은 방식으로 f(x,y)=4x2+y2를 xy평면으로 잘랐을 때 타원 방정식의 형태를 띄는 함수를
[xy][4001][xy] 와 같은 행렬의 형태로 표시할 수 있어요.
가운데 행렬을 SVD(Singular Value Decomposition)를 적용하여 eigenvector와 eigenvalue를 구할 수 있습니다.
svd
이때 첫번째 행렬은 eigenvector이고 각각 타원을 이루는 축에 대한 정보를 가져요.
또한 가운데 행렬은 eigenvalue이고 각각 타원의 반지름에 대한 정보를 가집니다.
조금 더 복잡한 타원 방정식을 SVD를 통해 기하학적으로 표현하면 아래와 같습니다.
eigen ellipse
[0.50−0.87]벡터를 축으로 하는 반지름은 1,
[−0.87−0.50]벡터를 축으로 하는 반지름은 41를 가지는 타원이 되는 것이죠.
Harris Corner Detection
sliding_window
앞서 이야기한 이미지의 영역에 따른 window 내부 값 변화량을 이용하여 우리는 corner detection을 수행하려 합니다.
변화량을 측정하기 위해 SSD(Summing up the Squared Differences)를 이용합시다.
기준 위치 (x,y)에서 window가 이동하며 변화한 SSD는 아래와 같이 구할 수 있어요.
E(u,v)=(x,y)∈W∑(I(x+u,y+v)−I(x,y))2(6)
하지만 이는 모든 픽셀에 대해 연산을 수행하기에는 너무 큰 비용을 가집니다.
그래서 우리는 N=1인 Taylor Series를 이용해서 근사값을 구하도록 할 것이에요.
I(x+u,y+v)≈I(x,y)+Ix(x,y)u+Iy(x,y)v
E(u,v)≈(x,y)∈W∑(Ixu+Iyv)2≈Au2+2Buv+Cv2(7)
A=(x,y)∈W∑Ix2,B=(x,y)∈W∑IxIy,C=(x,y)∈W∑Iy2
식 (7)을 정리하면 아래와 같이 표현할 수 있겠네요.
E(u,v)≈[uv]M[uv],M=[ABBC](8)
여기서 M을 second moment matrix 또는 Harris matrix라고 합니다.
Harris matrix는 window의 변화에 따라 아래와 같은 특징이 있어요.
ssd horizontal edge
위와 같은 경계의 경우 window 이동에 따른 I의 x축 변화량은 0이기 떄문에 y축 변화에만 영향을 받는 그래프의 모습을 나타냅니다.
ssd vertical edge
위와 같은 경계의 경우 window 이동에 따른 I의 y축 변화량은 0이기 때문에 x축 변화에만 영향을 받는 그래프의 모습을 나타냅니다.
Second Moment Matrix 해석
ssd graph
근사된 E(u,v)≈Au2+2Buv+Cv2를 약간 변형하면 A(u−a2)+C(v−b2)로 타원 방정식 형태로 변형할 수 있어요.
즉 E(u,v)는 수평하게 잘랐을 때 그 모양이 타원의 모습을 이룹니다.
eigenvalue ellipse
Second moment matrix M에 SVD를 적용하면
M=R−1[λ100λ2]R
로 표현할 수 있고 eigenvalue를 통해 타원의 형태를 확인할 수 있어요.
eigenvalue harris matrixλ1과 λ2가 비슷하면서 0에 가까우면 flat 영역이라고 할 수 있죠.
λ1>>λ2이면 x축에 대한 변화량이 크다는 의미이고 이는 수직 방향의 edge를 나타냅니다.
반대로 λ1<<λ2이면 y축에 대한 변화량이 크다는 의미이고 이는 수평 방향의 edge를 나타내죠.
만약 λ1 와 λ2가 둘다 큰 값을 가진다면 그곳이 바로 corner 입니다.
eigenvalue harris matrix
Eigenvalue와 eigenvector를 구하는 방법을 생각해봅시다.
Mx=λx,(M−λ)x=0(9)
식 (9)를 만족하는 λmin, λmax, xmin, xmax를 찾습니다.
이때 M의 eigenvalue와 eigenvector는 아래와 같아요.
xmax는 E를 급격하게 증가시키는 방향
λmax는 xmax방향에서 E의 증가량
xmin는 E를 느리게 증가시키는 방향
λmin는 xmin방향에서 E의 증가량
checkboard
위 그림에서 일정 값 이상의 λmax를 표시한 부분은 모든 edge를 나타내고 있으며,
일정 값 이상의 λmin를 표시한 부분은 corner를 나타내고 있어요.
위와 같이 λmin이 threshold값 이상을 가지는 모든 points를 찾습니다.
사실 각 픽셀마다 λmin를 구하는 것은 쉽지 않아요.
따라서 harris operator를 사용하여 λmin의 근사값을 찾습니다.
연산에는 많은 종류가 있지만 그중 가장 유명한 harris response는 아래와 같아요.
λmin≈f=(λ1+λ2)λ1λ2=trace(M)det(M)
Corner Detection
마지막으로 Harris Corner Detection으로 feature를 찾는 방법은 다음과 같아요.
각 포인트마다 gradient를 계산합니다.
Ix와 Iy를 계산하여 harrix matrix H를 구성하고 threshold 이상의 λmin들을 찾습니다.
찾은 λmin중 local maximum인 부분을 feature로 선택합니다.
harris detector exharris detector exharris detector exharris detector ex
이때 조금 더 성능을 향상시키기 위해 window내 모든 gradient를 동등하게 계산하는 것이 아닌 guassian과 같이 거리에 따라 가중치를 주는 방법도 있어요.
improved harris detector
Harris Detector 특징
invariant translation rotation
타원의 방향(eigenvector)이 바뀌지만 모양(eigenvalue)은 유지되기 때문에 회전과 이동에도 변하지 않는 특징이 있어요.